package com.zyh.homework;

public class Test4 {
    public static void main(String[] args) {
        /*
        分析以下需求，并用代码实现
	1.定义一个方法equals(int[] arr1,int[] arr2),功能:比较两个数组是否相等(长度和内容均相等则认为两个数组是相同的)
	2.定义一个方法fill(int[] arr,int value),功能:将数组arr中的所有元素的值改为value
	3.定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value),功能:将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value
	4.定义一个方法copyOf(int[] arr, int newLength),功能:将数组arr中的newLength个元素拷贝到新数组中,并将新数组返回,从索引为0开始
	5.定义一个方法copyOfRange(int[] arr,int from, int to),功能:将数组arr中从索引from(包含from)开始到索引to结束(不包含to)的元素复制到新数组中,并将新数组返回

         */
//        方法一测试
//        int[] arr1 = {1, 2, 3, 4};
//        int[] arr2 = {1, 2, 3, 4};
//        boolean equals = equals(arr1, arr2);
//        System.out.println("equals = " + equals);

//        方法二测试
//        int[] arr3 = {0, 5, 6, 32};
//        fill(arr3, 666);

//        方法三测试
//        int[] arr={3,6,9,18,33,44,66,7456};
//        fill(arr,3,6,6666);

//        方法四测试
//        int[] arr={3,6,9,18,33,44,66,7456};
//        int[] copyOf = copyOf(arr, 9);
//        printArray(copyOf);

//        方法五测试
        int[] arr={3,6,9,18,33,44,66,7456};
        int[] copyOfRange = copyOfRange(arr, 1, 4);
        printArray(copyOfRange);

    }

    //    漂亮打印
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                System.out.print(arr[i]);
            } else {
                System.out.print(arr[i] + ",");
            }
        }
        System.out.print("]");
    }

    //    比较两个数组是否相等
    public static boolean equals(int[] arr1, int[] arr2) {
//        数据校验
        if (arr1 == null || arr2 == null) {
            System.err.println("数组不合法！");
            return false;
        }
        if (arr1.length != arr2.length) {
            return false;
        } else {
            for (int i = 0; i < arr1.length; i++) {
                if (arr1[i] != arr2[i]) {
                    return false;
                }
            }
            return true;
        }
    }

    //    将数组arr中所有元素的值改为value
    public static void fill(int[] arr, int value) {
//        数据校验
        if (arr == null || arr.length == 0) {
            System.err.println("数组不合法！");
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            arr[i] = value;
        }
        printArray(arr);
    }

    //    将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value
    public static void fill(int[] arr, int fromIndex, int toIndex, int value) {
//        数据校验
        if (fromIndex < 0) {
            System.err.println("输入的fromIndex不合法！");
            return;
        }
        if (toIndex > arr.length) {
            toIndex = arr.length;
        }
        for (int i = fromIndex; i < toIndex; i++) {
            arr[i] = value;
        }
        printArray(arr);
    }

    //    将数组arr中的newLength个元素拷贝到新数组中，并将新数组返回，从索引为0开始
    public static int[] copyOf(int[] arr, int newLength) {
//        数据校验
        if (newLength <= 0) {
            System.err.println("数据不合法");
            return null;
        }
        if (newLength > arr.length) {
            newLength = arr.length;
        }
        int newArr[] = new int[newLength];
        for (int i = 0; i < newLength; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

    //    将数组arr中从索引from(包含from)开始到索引to结束(不包含to)的元素复制到新数组中,并将新数组返回
    public static int[] copyOfRange(int[] arr, int from, int to) {
//        数据校验
        if (arr == null || arr.length == 0 || from < 0) {
            System.err.println("数据有误！");
            return null;
        }
        if (to > arr.length) {
            to = arr.length;
        }
        int[] newArr = new int[to - from];
        for (int i = from; i < to; i++) {//TODO 有bug
            newArr[i] = arr[i];
        }
        return newArr;
    }
}
